package com.ssd.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
import org.springframework.web.util.pattern.PathPatternParser;

/**
 * 跨域配置类
 * 用于配置全局的跨域请求设置，解决前端跨域请求问题
 */
@Configuration
public class CorsConfig {
    /**
     * 创建和配置CorsWebFilter实例
     * 该方法配置了跨域请求的允许方法、允许的源以及允许的请求头，并应用到所有路径
     *
     * @return CorsWebFilter实例，用于处理跨域请求
     */
    @Bean
    public CorsWebFilter corsFilter() {
        // 初始化跨域配置
        CorsConfiguration config = new CorsConfiguration();
        // 允许所有HTTP方法
        config.addAllowedMethod("*");
        // 允许所有源
        config.addAllowedOrigin("*");
        // 允许所有请求头
        config.addAllowedHeader("*");

        // 使用UrlBasedCorsConfigurationSource来管理跨域配置，以便可以根据URL路径应用不同的配置
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
        // 将跨域配置应用到所有路径
        source.registerCorsConfiguration("/**", config);

        // 返回配置好的CorsWebFilter实例
        return new CorsWebFilter(source);
    }
}

